/**
* @author yangyu.liu 
* @time    2022-12-2-17
* @description    仓库创建
*/
//1. 引入创建pinia实例的方法
import { createPinia, defineStore } from "pinia";
// 引入加解密方法
import { deCodeApi, enCodeApi } from "../utils";

// 2.创建pinia实例
const Pinia = createPinia()

// 4.定义一个defineStore()方法，这个方法里面有,'字符串'作为id，还有state（）{return{}},
// 还有actions,还有getters方法,定义完后将这个方法导出,如果其他组件中要使用定义的这个方法里的数据，需要import引入
// 并且他是一个方法需要先给他赋个变量名，修改数据的话就直接变量名.想要修改的数据名就行了
// 6.获取到sessionstorage的token
let token = sessionStorage.getItem('now-token')
// 拿到sessionStorage中的用户信息
let userInfo = sessionStorage.getItem('now-userInfo') || {}
// 拿到sessionStorage中保存的权限信息
let userRights = sessionStorage.getItem('now-userRights') || {}
const commonDefinition = defineStore(
    'common', {
    // 5.将token存到state里
    state() {
        return {
            token: token,
            userInfo,
            userRights
        }
    },
    getters: {
        //获取token
        getToken() {
            return deCodeApi(this.token)
        },
        // 获取用户信息
        getUserInfo() {
            return JSON.parse(deCodeApi(this.userInfo))
        },
        // 获取权限信息
        getUserRights() {
            return JSON.parse(deCodeApi(this.userRights))
        }
    },
    actions: {
        // 保存token
        setToken(_token) {
            _token = enCodeApi(_token)
            this.token = _token
            sessionStorage.setItem('now-token', _token)
        },
        // 保存用户信息
        setUserInfo(_userInfo) {
            _userInfo = enCodeApi(JSON.stringify(_userInfo))
            this.userInfo = _userInfo
            sessionStorage.setItem('now-userinfo', _userInfo)
        },
        // 保存权限
        setUserRights(_userRights) {
            _userRights = enCodeApi(JSON.stringify(_userRights))
            this.userRights = _userRights
            sessionStorage.setItem('now-userRights', _userRights)
        }
    }
})

// 3.导出定义的pinia实例和定义的各个状态数仓对象,然后去main.js文件中引入
// 挂载到根节点
export {
    Pinia,
    commonDefinition
}